
export const util = {
	// 封装LocalStorage过期控制存储代码
	setLocalStorage: function (key, value, expire) {
		uni.removeStorageSync(key);
		uni.setStorageSync(
			key,
			JSON.stringify({
				data: value, 
				time: expire ? new Date().getTime() + expire : false
			})
		)
	},
	// 封装LocalStorage过期控制获取代码
	getLocalStorage: function (key) {	
		let dataObj = 
			uni.getStorageSync(key) ? 
			JSON.parse( uni.getStorageSync(key) ) : 
			null;
		if (dataObj) {
			if (dataObj.time && new Date().getTime() > dataObj.time) {
			  uni.removeStorageSync(key);
			  console.log('存储' + key + '的uniStorage信息已过期');
			  return false;
			}else return dataObj.data;
		} else return false; 
	},
	// 封装LocalStorage过期控制删除代码
	delLocalStorage: function (key) {
		uni.removeStorageSync(key);
	},
	//制保留2位小数，如：2，会在2后面补上00.即2.00
	toDecimal2: function (x) {
	  var f = parseFloat(x);
	  if (isNaN(f)) {
	    return false;
	  }
	  var f = Math.round(x*100)/100;
	  var s = f.toString();
	  var rs = s.indexOf('.');
	  if (rs < 0) {
	    rs = s.length;
	    s += '.';
	  }
	  while (s.length <= rs + 2) {
	    s += '0';
	  }
	  return s;
	},
	// 附件分片上传
	uploadSectionFile: function (file, options) { 
		return new Promise(resolve => {
		  let self = this;
		  let Orientation;
		  let ndata;
		  if(file.size <= options.limitSize * 1024){// 判断图片是否大于500KB,是就直接上传
			ndata = file;
			resolve(ndata);
		  }else{ // 反之压缩图片
			let reader = new FileReader();
			reader.readAsDataURL(file);// 将图片转成 base64 格式
			console.log(reader)
			// 读取成功后的回调
			reader.onloadend = function () {
			  let result = this.result;
			  let img = new Image();
			  img.src = result;
			  img.onload = function () {
				let ndata = self.compress(img, Orientation);
				//BASE64转图片
				var arr = ndata.split(','), mime = arr[0].match(/:(.*?);/)[1],
				bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
				while(n--){
				  u8arr[n] = bstr.charCodeAt(n);
				}
				ndata = new File([u8arr],file.name, {type:mime})
				resolve(ndata);
			  }
			} 
		  }
		});
	},
	// 压缩图片
	compress: function (img, Orientation) {
		let canvas = document.createElement("canvas");
		let ctx = canvas.getContext('2d');
		let tCanvas = document.createElement("canvas");//瓦片canvas
		let tctx = tCanvas.getContext("2d");
		let initSize = img.src.length;
		let width = img.width;
		let height = img.height;
		let ratio;
		if ((ratio = width * height / 4000000) > 1) { // 如果图片大于四百万像素，计算压缩比并将大小压至400万以下
		  console.log("大于400万像素")
		  ratio = Math.sqrt(ratio);
		  width /= ratio;
		  height /= ratio;
		} else {
		  ratio = 1;
		}
		canvas.width = width;
		canvas.height = height;
		ctx.fillStyle = "#fff";//铺底色
		ctx.fillRect(0, 0, canvas.width, canvas.height);
		let count;
		if ((count = width * height / 1000000) > 1) { // 如果图片像素大于100万则使用瓦片绘制
		  console.log("超过100W像素");
		  count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片
		  // 计算每块瓦片的宽和高
		  let nw = ~~(width / count);
		  let nh = ~~(height / count);
		  tCanvas.width = nw;
		  tCanvas.height = nh;
		  for (let i = 0; i < count; i++) {
			for (let j = 0; j < count; j++) {
			  tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio, nh * ratio, 0, 0, nw, nh);
			  ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);
			}
		  }
		} else {
		  ctx.drawImage(img, 0, 0, width, height);
		}
		//修复ios上传图片的时候 被旋转的问题
		if(Orientation != "" && Orientation != 1){
		  switch(Orientation){
			case 6://需要顺时针（向左）90度旋转
				this.rotateImg(img,'left',canvas);
				break;
			case 8://需要逆时针（向右）90度旋转
				this.rotateImg(img,'right',canvas);
				break;
			case 3://需要180度旋转
				this.rotateImg(img,'right',canvas);//转两次
				this.rotateImg(img,'right',canvas);
				break;
		  }
		}
		//进行最小压缩
		let ndata = canvas.toDataURL('image/jpeg', 0.1);
		console.log('压缩前：' + initSize);
		console.log('压缩后：' + ndata.length);
		console.log("ndata:"+ndata)
		console.log('压缩率：' + ~~(100 * (initSize - ndata.length) / initSize) + "%");
		tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0;
		return ndata;
	},
};